package com.yequan.file.delete;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
 * <h1>此工具类包含的对文件及文件夹的基本操作</h1> 创建、移动、删除、复制、zip压缩、zip解压 <br>
 * 依赖jar包，ant.jar <br>
 *
 * @author zw
 * @date 2016-6-28
 */
public final class FileUtil {

    //记录各个文件头信息及对应的文件类型
    public static List<String> allowFileTypes = new ArrayList<String>();

    /**
     * 压缩解压编码
     **/
    private static String ZIP_ENCODING = "GBK";


    /**
     * 判断文件是否存在(文件名不区分大小写)
     *
     * @param filePath 文件路径，例如：F:\a.txt
     * @return 存在，返回true；否则，返回false
     */
    public static boolean isExist(String filePath) {
        File file = null;
        boolean boo = false;
        try {
            file = new File(filePath);
            boo = file.exists();
        } catch (Exception e) {
            e.printStackTrace();
            boo = false;
        }
        return boo;
    }

    /**
     * 删除文件或空文件夹
     *
     * @param filePath 文件路径，如F:\bb\b.txt
     * @return boolean
     */
    public static boolean delFile(String filePath) {
        boolean result = false;
        try {
            File myDelFile = new File(filePath);
            result = myDelFile.delete();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 删除文件夹(包含文件夹下的文件)
     *
     * @param folderPath 文件夹路径，如F:\bb
     * @return
     */
    public static void delFolder(String folderPath) {
        delFolderByALLFile(folderPath); // 删除完里面所有内容
        delFile(folderPath);
    }

    /**
     * 删除文件夹里面的所有文件 及该文件
     *
     * @param folderPath 文件夹路径，例如：F:\bb
     */
    public static void delFolderByALLFile(String folderPath) {
        File file = new File(folderPath);
        if (!file.exists()) {
            return;
        }
        if (!file.isDirectory()) {
            return;
        }
        String[] tempList = file.list();
        File temp = null;
        for (int i = 0; i < tempList.length; i++) {
            if (folderPath.endsWith(File.separator)) {
                temp = new File(folderPath + tempList[i]);
            } else {
                temp = new File(folderPath + File.separator + tempList[i]);
            }
            if (temp.isFile()) {
                temp.delete();
            }
            if (temp.isDirectory()) {
                delFolderByALLFile(folderPath + "/" + tempList[i]);
                temp.delete();
            }
        }
        file.delete();//最后删除文件夹
    }

    /**
     * 先根遍历序递归删除文件夹
     *
     * @param dirFile 要被删除的文件或者目录
     * @return 删除成功返回true, 否则返回false
     */
    public static boolean deleteFile(File dirFile) {
        // 如果dir对应的文件不存在，则退出
        if (!dirFile.exists()) {
            return false;
        }

        if (dirFile.isFile()) {
            return dirFile.delete();
        } else {
            File[] files = dirFile.listFiles();
            if (null != files && files.length > 0) {
                for (File file : files) {
                    deleteFile(file);
                }
            }
        }
        return dirFile.delete();
    }

}
